<?php
	/**
	 * 框架使用的函数库
	 */
	 
	/**
	 * 获得用户的IP
	 */ 
	 
	 function getIp(){
	 	if(!empty($_SERVER["HTTP_CLIENT_IP"])){
			  $cip = $_SERVER["HTTP_CLIENT_IP"];
		}elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
  			$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
		}elseif(!empty($_SERVER["REMOTE_ADDR"])){
  			$cip = $_SERVER["REMOTE_ADDR"];
		}else{
 		 $cip = "无法获取！";
		}
			return $cip;
		}
	
	 
	/**
	 * 打印数组的方法
	 * @param unknown $var
	 */
	function p($var){
		echo '<pre>';
		print_r($var);
		echo '</pre>';
	}
	
	/**
	 * 定义模板局部不缓存方法
	 */
	 function nocache($param,$content,&$smarty){
	 	return $content;
	 }
	
	
	/**
	 * 打印当前所有的常量 
	 */
	function print_const(){
		p(get_defined_constants(true)['user']);
	}
	
	/**
	 * 查看当前脚本运行时间
	 */
	function runttime($time){
		$currentTime = microtime(true);
		return $currentTime - $time;
	}

	/**
	 * 用于停止发送一条信息然后停止后面执行
	 * @param unknown $msg
	 */
	function halt($msg){
		die($msg);
	}
	
	/**
	 * 开启session 
	 * 如果传入相应的item那么表示获得
	 * 相应的值  如果两个都不为空那么表示设置
	 * 相应session的值
	 * @param unknown $item
	 */
	function session($item=null,$val=null){
		//如果$item为一个整数1或一个布尔值true那么表示开启session
		if($item === true){
			session_id() || session_start();
			return;
		}
		if(is_string($item)){
			if(is_null($val)){
// 				echo $_SESSION[$item];
				return isset($_SESSION[$item])?$_SESSION[$item]:null;
			}
		}
		if(!is_null($item) && !is_null($val)){
			$_SESSION[$item] = $val;
		}
	}
	
	/**
	 * 设置 session的时间
	 */
	 function session_time($time=null){
	 	$time = is_null($time)?3600*24:$time;
	 	setcookie(session_name(),session_id(),time()+$time,'/');
	 }
	
	
	
	/**
	 * C函数用于加载配置项和设置配置项
	 * 1、当两个参数都为null那么表示返回所有的配置项
	 * 2、当$item为一个数组那么表示合并两个配置项
	 * 3、当$item为一个字符串$val为一个那么表示获得相应的配置项
	 * 4、当$item和$val都为字符串那么表示设置相应的配置项
	 */
	function C($item=null,$val=null){
		static $configs = array();
		
		//当$item为一个数组那么表示合并两个配置项
		if(is_array($item)){
			$configs = array_merge($configs,$item);
		}
		
		//如果第一个参数为一个字符串第二个为空那么表示获得相应的配置项
		if(is_string($item)){
			if(is_null($val)){
				return isset($configs[$item])?$configs[$item]:null;
			}else{
				$configs[$item] = $val;
			}
		}		
		//当两个参数都为null那么表示返回所有的配置项
		if(is_null($item) && is_null($val)){
			return $configs;
		}
	}
	
	/**
	 * 配置cookie函数
	 * 
	 * @param string $item  //cookie键
	 * @param string $val   //cookie值
	 * @param string $expire //cookie生命周期
	 * @param string $path //cookie生效目录
	 */
	function cookie($item=null,$val=null,$expire=null,$path=null){
		//判断cookie的生命周期
		$expire = is_null($expire)?C('COOKIE_EXPRIRE'):$expire;
		//判断cookie的生效目录
		$path = is_null($path)?C('COOKIE_PATH'):$path;
		//如果item为一个字符串，而且第二个参数为一个空那么表示获得这个cookie的值
		if(is_string($item)){
			if(is_null($val)){
				$val = isset($_COOKIE[$item])?$_COOKIE[$item]:null;
				if(!is_null($val)){
					//判断如果是一个序列化的字符串那么将他反序列化返回去
					$pattern = '/:{.*}$/';
					$isSerialize = preg_match($pattern, $val);
					return unserialize($val);
				}
			}else{
				if(!is_string($val)){
					$val = serialize($val);
				}
				setcookie($item,$val,$expire,$path);
			}
		}
		
	}
	
	/**
	 *	实例化Model类函数
	 */
	function M($table){
		$m = new Model($table);
		return $m;
	}
	
	/**
	 * 实例化自定义model
	 */
	 function D($table){
	 	$m = ucfirst($table).'Model';
		$model = new $m($table);
		return $model;
	 }
	
	
	/**
	 * 将内容写入文件中
	 */
	function data_to_file($data,$file){
		///先将data转为一个可以格式化成一个可以执行的字符串
		$dataStr = var_export($data,true);
		$str = <<<str
<?php
		return {$dataStr};
?>	
str;
		return file_put_contents($file, $str);
		
	}
	
	/**
	 * 退出session
	 */
	function session_out($name=null){
		session_unset();
		session_destroy();
		
	}
	
	
	
	
	
	
	
	
	